﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Citas.Dominio;
using NHibernate;
using NHibernate.Criterion;

namespace Citas.Persistencia.NH
{
    public class CitaDAO : BaseDAO<Cita, Int32>, ICitaDAO
    {

        public Cita ObtenerPorPacienteFecha(Int32 codigoPaciente, DateTime fechaHora)
        {
            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                ICriteria busqueda = sesion.CreateCriteria(typeof(Cita));
                busqueda.Add(Restrictions.Eq("Paciente.Codigo", codigoPaciente));
                busqueda.Add(Restrictions.Eq("FechaHora", fechaHora));
                //busqueda.Add(Restrictions.And(Restrictions.Eq("CodigoGrupo", codigoGrupo), Restrictions.Eq("CodigoPoder", codigoPoder)));
                return busqueda.UniqueResult<Cita>();
            }

        }

        public Cita ObtenerPorPaciente(Int32 codigoPaciente)
        {
            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                ICriteria busqueda = sesion.CreateCriteria(typeof(Cita));
                busqueda.Add(Restrictions.Eq("Paciente.Codigo", codigoPaciente));
                return busqueda.UniqueResult<Cita>();
            }

        }

        public ICollection<Cita> ListarXNumero(Int32 numero)
        {
            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                ICollection<Cita> resultado = sesion
                                        .CreateCriteria(typeof(Cita))
                                        .Add(Restrictions.Eq("Numero", numero))
                                        .List<Cita>();
                return resultado;

            }
        }

        public ICollection<Cita> ListarXPaciente(String paciente)
        {
            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                ICollection<Cita> resultado = sesion
                                        .CreateCriteria(typeof(Cita))
                                        .Add(Restrictions.Like("Paciente.ApellidoPaterno", paciente + "%"))
                                        .List<Cita>();
                return resultado;

            }
        }

        public ICollection<Cita> ListarXNumeroOPaciente(Int32 numero, Paciente paciente)
        {
            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                ICollection<Cita> resultado = sesion
                                        .CreateCriteria(typeof(Cita))
                                        .Add(Restrictions.Disjunction()
                                             .Add(Restrictions.Eq("Numero", numero))
                                             .Add(Restrictions.Eq("Paciente", paciente)))
                                        .List<Cita>();
                return resultado;

            }
        }
    }
}